import mean from "./mean.js";
import standardDeviation from "./standard_deviation.js";

/**
 * 用于计算[单样本t检验](https://en.wikipedia.org/wiki/Student%27s_t-test#One-sample_t-test)，将样本均值与已知值x进行比较。
 *
 * 在这种情况下，我们试图确定总体均值是否等于我们已知的值，即这里的`x`。
 * 通常，这里的结果用于查找[p值](http://en.wikipedia.org/wiki/P-value)，对于一定的显著性水平，
 * 可以确定是否拒绝原假设。
 *
 * @param {Array<number>} x 一个或多个数字的样本
 * @param {number} expectedValue 总体均值的期望值
 * @returns {number} t值
 * @example
 * tTest([1, 2, 3, 4, 5, 6], 3.385).toFixed(2); // => '0.16'
 */
function tTest(x, expectedValue) {
    // 样本的均值
    const sampleMean = mean(x);

    // 样本的标准差
    const sd = standardDeviation(x);

    // 样本长度的平方根
    const rootN = Math.sqrt(x.length);

    // 返回t值
    return (sampleMean - expectedValue) / (sd / rootN);
}

export default tTest;
